home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 676-700 / 687 / xsb / shuffle / blank.c next >
C/C++ Source or Header  |  1995-03-18  |  3KB  |  121 lines

  1. #include "/xsb.h"
  2.  
  3. #include <hardware/dmabits.h>
  4.  
  5. struct timerequest *tr;
  6.  
  7. extern struct Custom __far custom;
  8. struct GfxBase *GfxBase;
  9. struct IntuitionBase *IntuitionBase;
  10. struct RastPort *rp;
  11. int xs,ys,xb,yb,x1,y1;
  12.  
  13. void srand(int);
  14. int rand(void);
  15. #define rnd(x) (rand()%(x))
  16. long quitsig;
  17.  
  18. void drawframe(int x,int y)
  19. {
  20.     SetAPen(rp,1);
  21.     Move(rp,x*xs,y*ys);
  22.     Draw(rp,x*xs+xs-1,y*ys);
  23.     Draw(rp,x*xs+xs-1,y*ys+ys-1);
  24.     Draw(rp,x*xs,y*ys+ys-1);
  25.     Draw(rp,x*xs,y*ys);
  26. }
  27.  
  28. void pause(void)
  29. {
  30.     if(SetSignal(0,0)&quitsig) return;
  31.     tr->tr_time.tv_secs=0;
  32.     tr->tr_time.tv_micro=300;
  33.     DoIO(tr);
  34. }
  35.  
  36. void doscroll(int m)
  37. {
  38.     int c;
  39.     switch(m) {
  40.         case 0: for(c=0; c<xs; c++) { ScrollRaster(rp,-1,0, xb*xs-xs, yb*ys, xb*xs+xs-1, yb*ys+ys-1); pause(); } break;
  41.         case 1: for(c=0; c<xs; c++) { ScrollRaster(rp,1,0, xb*xs, yb*ys, xb*xs+xs+xs-1, yb*ys+ys-1); pause(); } break;
  42.         case 2: for(c=0; c<ys; c++) { ScrollRaster(rp,0,-1, xb*xs, yb*ys-ys, xb*xs+xs-1, yb*ys+ys-1); pause(); } break;
  43.         case 3: for(c=0; c<ys; c++) { ScrollRaster(rp,0,1, xb*xs, yb*ys, xb*xs+xs-1, yb*ys+ys+ys-1); pause(); } break;
  44.     }
  45. }
  46.  
  47. int lastdir=-1,rep;
  48. void scroll(void)
  49. {
  50.     int m,rv=rand();
  51.  
  52.     for(;;) {
  53.         rv+=VBeamPos()+rand();
  54.         m=rv%4;
  55.         if(lastdir==0 && m==1) continue;
  56.         if(lastdir==1 && m==0) continue;
  57.         if(lastdir==2 && m==3) continue;
  58.         if(lastdir==3 && m==2) continue;
  59.         if(lastdir==m) {
  60.             if(++rep>4) continue;
  61.         }
  62.         else rep=0;
  63.         if(!m && xb>0) { doscroll(0); xb--; break; }
  64.         if(m==1 && xb<7) { doscroll(1); xb++; break; }
  65.         if(m==2 && yb>0) { doscroll(2); yb--; break; }
  66.         if(m==3 && yb<7) { doscroll(3); yb++; break; }
  67.     }
  68.     lastdir=m;
  69. }
  70.  
  71. void __saveds XSBBlankScreen(long signum,struct XSBInfo *xi)
  72. {
  73.     struct Screen *front,*scr;
  74.     int x,y;
  75.     short cmap[64];
  76.     
  77.     quitsig=signum;
  78.     tr=xi->tr;
  79.     GfxBase=OldOpenLibrary("graphics.library");
  80.     IntuitionBase=OldOpenLibrary("intuition.library");
  81.     front=IntuitionBase->FirstScreen;
  82.  
  83.     srand(VBeamPos());
  84.     if(!(scr=OpenScreenTags(0,
  85.         SA_Width,xs=front->Width,SA_Height,ys=front->Height,
  86.         SA_Behind,TRUE,
  87.         SA_Depth,front->BitMap.Depth,
  88.         SA_DisplayID,GetVPModeID(&front->ViewPort),
  89.         TAG_DONE))) goto xit;
  90.     rp=&scr->RastPort;
  91.     BltBitMap(&front->BitMap,0,0,&scr->BitMap,0,0,front->Width,front->Height,0xc0,-1,0);
  92.     xs/=8; ys/=8;
  93.     for(x=0; x<8; x++) {
  94.         for(y=0; y<8; y++) drawframe(x,y);
  95.     }
  96.     if(front->ViewPort.ColorMap) {
  97.         for(x=0; x<(1<<(front->BitMap.Depth));x++) cmap[x]=GetRGB4(front->ViewPort.ColorMap,x);
  98.         LoadRGB4(&scr->ViewPort,&cmap[0],(1<<(front->BitMap.Depth)));
  99.     }
  100.     xb=rnd(8); yb=rnd(8);
  101.     SetAPen(rp,0);
  102.     RectFill(rp,xb*xs,yb*ys,xb*xs+xs-1,yb*ys+ys-1);
  103.     ScreenToFront(scr);
  104.     custom.dmacon=(1<<5);
  105.     while(!(SetSignal(0,signum)&signum)) scroll();
  106. xit:
  107.     if(scr) CloseScreen(scr);
  108.     CloseLibrary(IntuitionBase);
  109.     CloseLibrary(GfxBase);
  110. }
  111.  
  112. char *XSBGetID(void)
  113. {
  114.     return("XSB Shuffle Blanker\n\nDivert and shuffle the\nfrontmost screen");
  115. }
  116.  
  117. struct XSBParam *XSBGetParams(void)
  118. {
  119.     return(0);
  120. }
  121.